sql command

Database SQL – Sub Query

Subquery หรือ Inner query  หรือ Nested query เป็นการดึงข้อมูลใน table จาก ผลลัพธ์ของการทำ SQL Select query  ก่อนหน้านี้อีกทีอีกที ซึ่งการทำ subquery สามารถใช้งาน Where Clause ไม่ว่าจะเป็น main query หรือ ส่วนของ subquery ส่วนมากแล้วมักถูกใช้ในเงือนไขที่ main query ไม่สามารถดึงข้อมูลได้ตามเงือนไขปกติที่สามารถทำได้ หรือ ติดข้อจำกัดภายใต้กฎของ SQL โดย subquery เองสามารถถูกใช้ภายใต้ SQL Select, SQL Insert, SQL Update และ SQL Delete ที่เป็น statement และ SQL Operator ต่างๆ

กฎการใช้งาน Subquery

  • Subquery ต้องอยู่ภายใต้ วงเล็บ
  • Subquery สามารถมีได้อย่างน้อย 1 column ใน Select Clause นอกจาก main query จะมีหลาย column ซึ่งทั้งหมดต้องมีใน subquery เพื่ออ้างอิงด้วย
  • SQL ORDER BY ไม่สามารถใช้ใน subquery ได้ แต่ main query สามารถใช้ได้
  • SQL GROUP BY ไม่สามารถใช้ใน subquery ได้ แต่ main query สามารถใช้ได้
  • ไม่สามารถ select ข้อมูลที่เป็นแบบอ้างอิง เช่น BLOB, ARRAY, CLOB หรือ NCLOB
  • ไม่สามารถใช้ BETWEEN Operator กับ subquery ได้ แต่สามารถใช้ภายใต้ subquery ได้

 

Subquery โดย Select Statement

SELECT column_name [, column_name ]
FROM   table1 [, table2 ]
WHERE  column_name OPERATOR
   (SELECT column_name [, column_name ]
   FROM table1 [, table2 ]
   [WHERE])

ตัวอย่าง subquery โดย select statement

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  35 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

คำสั่ง

SQL> SELECT * 
   FROM CUSTOMERS 
   WHERE ID IN (SELECT ID 
         FROM CUSTOMERS 
         WHERE SALARY > 4500) ;

ผลลัพธ์

+----+----------+-----+---------+----------+
| ID | NAME     | AGE | ADDRESS | SALARY   |
+----+----------+-----+---------+----------+
|  4 | Chaitali |  25 | Mumbai  |  6500.00 |
|  5 | Hardik   |  27 | Bhopal  |  8500.00 |
|  7 | Muffy    |  24 | Indore  | 10000.00 |
+----+----------+-----+---------+----------+

 

Subquery โดย Insert Statement

INSERT INTO table_name [ (column1 [, column2 ]) ]
   SELECT [ *|column1 [, column2 ]
   FROM table1 [, table2 ]
   [ WHERE VALUE OPERATOR ]

ตัวอย่าง subquery โดย insert statement

SQL> INSERT INTO CUSTOMERS_BKP
   SELECT * FROM CUSTOMERS 
   WHERE ID IN (SELECT ID 
   FROM CUSTOMERS) ;

 

Subquery โดย Update Statement

UPDATE table
SET column_name = new_value
[ WHERE OPERATOR [ VALUE ]
   (SELECT COLUMN_NAME
   FROM TABLE_NAME)
   [ WHERE) ]

ตัวอย่าง subquery โดย update statement

คำสั่ง

SQL> UPDATE CUSTOMERS
   SET SALARY = SALARY * 0.25
   WHERE AGE IN (SELECT AGE FROM CUSTOMERS_BKP
      WHERE AGE >= 27 );

ผลลัพธ์

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  35 | Ahmedabad |   125.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  2125.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

 

Subquery โดย Delete Statement

DELETE FROM TABLE_NAME
[ WHERE OPERATOR [ VALUE ]
   (SELECT COLUMN_NAME
   FROM TABLE_NAME)
   [ WHERE) ]

ตัวอย่าง subquery โดย delete statement

คำสั่ง

SQL> DELETE FROM CUSTOMERS
   WHERE AGE IN (SELECT AGE FROM CUSTOMERS_BKP
      WHERE AGE >= 27 );

ผลลัพธ์

+----+----------+-----+---------+----------+
| ID | NAME     | AGE | ADDRESS | SALARY   |
+----+----------+-----+---------+----------+
|  2 | Khilan   |  25 | Delhi   |  1500.00 |
|  3 | kaushik  |  23 | Kota    |  2000.00 |
|  4 | Chaitali |  25 | Mumbai  |  6500.00 |
|  6 | Komal    |  22 | MP      |  4500.00 |
|  7 | Muffy    |  24 | Indore  | 10000.00 |
+----+----------+-----+---------+----------+

 

 

Reference:

รวมคำสั่ง SQL Command พื้นฐานเบื้องต้น

Database, Oracle, MySQL

 

 

Author: Suphakit Annoppornchai

Credit: https://saixiii.com, https://www.tutorialspoint.com

Leave a Reply